package br.ufc.persis.model;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Funcionario {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="cod_func")
	private long id;
	private String nome;
	private String endereco;
	private char sexo;
	@Temporal(TemporalType.DATE)
	private Date nascimento;
	private double salario;
	@OneToOne
	@JoinColumn(name = "dept_id")
	private Departamento departamento;
	@OneToMany(cascade = CascadeType.ALL)
	private Collection<Dependente> dependentes;
	
	public Funcionario() {
		this.dependentes = new ArrayList<Dependente>();
	}
	
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getEndereco() {
		return endereco;
	}
	
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public char getSexo() {
		return sexo;
	}
	
	public void setSexo(char sexo) {
		this.sexo = sexo;
	}
	
	public Date getNascimento() {
		return nascimento;
	}
	
	public void setNascimento(Date nascimento) {
		this.nascimento = nascimento;
	}

	public Collection<Dependente> getDependentes() {
		return dependentes;
	}

	public void setDependentes(Collection<Dependente> dependentes) {
		this.dependentes = dependentes;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public Departamento getDepartamento() {
		return departamento;
	}

	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}
	
	@Override
	public String toString() {
		String dados = "Código: "+id+"\n";
		dados+="Nome: "+nome+"\n";
		dados+="Endereço: "+endereco+"\n";
		dados+="Sexo: "+sexo+"\n";
		dados+="Salario: "+salario+"\n";
		dados+="Nascimento: "+formataData(nascimento)+"\n";
		dados+="Cargo: "+this.getClass().getSimpleName()+"\n";
		return dados;
	}
	
	private String formataData(Date data){
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		return format.format(data);		
	}
}
